package math.geom3d;

import math.base.Point3d;
import math.base.Vector3d;
import math.geomUtils.CurveType;

/**
 * @author Saga
 *
 */
public class TrimmedCurve3d extends BoundedCurve3d {

    public TrimmedCurve3d(final Curve3d _baseCurve, final double _firstParam,
            final double _lastParam) {
        this.baseCurve = _baseCurve;
        this.firstParam = _firstParam;
        this.lastParam = _lastParam;
    }

    @Override
    public CurveType getCurveType() {
        return CurveType.TRIMMED_CURVE;
    }

    public void reverse() {

    }

    public Curve3d reversed() {
        return null;
    }

    @Override
    public boolean isPeriodic() {
        return this.baseCurve.isPeriodic();
    }

    @Override
    public double getPeriod() {
        return this.baseCurve.getPeriod();
    }

    @Override
    public Point3d calcValue(final double _param) {
        return this.baseCurve.calcValue(_param);
    }

    @Override
    public Vector3d calcDerivative(final double _param) {
        return this.baseCurve.calcDerivative(_param);
    }

    @Override
    public Vector3d calcDerivativeN(final double _param, final int _order) {
        return this.baseCurve.calcDerivativeN(_param, _order);
    }

    @Override
    public void calcValueAndDerivative1(final double _param, final Point3d _pt,
            final Vector3d _der1) {
        this.calcValueAndDerivative1(_param, _pt, _der1);
    }

    @Override
    public void calcValueAndDerivative2(final double _param, final Point3d _pt,
            final Vector3d _der1, final Vector3d _der2) {
        this.calcValueAndDerivative2(_param, _pt, _der1, _der2);
    }

    @Override
    public final void calcValueAndDerivative3(final double _param, final Point3d _pt,
            final Vector3d _der1, final Vector3d _der2, final Vector3d _der3) {
        this.calcValueAndDerivative3(_param, _pt, _der1, _der2, _der3);
    }

    @Override
    public final TrimmedCurve3d clone() {
        return null;
    }

    protected Curve3d baseCurve;
}
